package com.vehiclemanagement.service;

import com.baomidou.mybatisplus.core.metadata.IPage;     //IPage：分页数据接口（分页），获取一个数据当前页的对象
import com.baomidou.mybatisplus.extension.service.IService;   //IService：服务接口，提供基本的CRUD操作
import com.vehiclemanagement.entity.Binding;                  //Binding：绑定关联实体类

/**
 * 绑定关联服务接口
 */
public interface BindingService extends IService<Binding> {
    
    /**
     * 分页查询绑定关联列表
     */
    IPage<Binding> pageBindings(
        Integer current, 
        Integer size, 
        String plateNumber,
        String driverName,
        String fuelCardNumber,
        String etcCardNumber,
        Long vehicleId, 
        Long driverId, 
        Integer status, 
        String sortField, 
        String sortOrder
    );
    
    /**
     * 根据ID获取绑定关联信息
     * 
     * @param id 绑定ID
     * @return 绑定关联信息
     */
    Binding getBindingById(Long id);
    
    /**
     * 检查是否存在有效的绑定关系
     * 
     * @param vehicleId 车辆ID
     * @param driverId 驾驶员ID
     * @param fuelCardId 加油卡ID
     * @param etcCardId ETC卡ID
     * @return 是否存在
     */
    boolean existsActiveBinding(Long vehicleId, Long driverId, Long fuelCardId, Long etcCardId);
    
    /**
     * 添加绑定关联信息
     * 
     * @param binding 绑定关联信息
     * @return 是否成功
     */
    boolean addBinding(Binding binding);
    
    /**
     * 更新绑定关联信息
     * 
     * @param binding 绑定关联信息
     * @return 是否成功
     */
    boolean updateBinding(Binding binding);
    
    /**
     * 删除绑定关联信息
     * 
     * @param id 绑定ID
     * @return 是否成功
     */
    boolean deleteBinding(Long id);
    
    /**
     * 检查车辆是否已经存在有效绑定
     * 
     * @param vehicleId 车辆ID
     * @param excludeId 需要排除的绑定ID（用于编辑时排除当前记录）
     * @return 是否已绑定
     */
    boolean isVehicleAlreadyBound(Long vehicleId, Long excludeId);
} 